<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
    
    (1) 封装一个函数 在数组尾部新增一个或多个元素  push([1,2,3],"a")  => [1,2,3,"a"]
    (2) 封装一个函数 删除数组尾部的元素   pop([1,2,3])  => [1,2]

    (3) 封装一个函数 在数组头部新增一个或多个元素  unshift([1,2,3],"a")  => ["a",1,2,3]
    (4) 封装一个函数 删除数组头部的元素   shift([1,2,3])  => [2,3]

    (5) 封装一个函数 实现数组翻转  reverse([1,2,3,4,5,6,7]) => [7,6,5,4,3,2,1]
    (6) 封装一个函数 用特定的字符将数组拼接形成字符串   join(["a","b","c","d"],"-") => "a-b-c-d"
    -->
</body>
<script>
    // 函数封装步骤
    // 1. 实现基本功能的代码
    // 2. 封装 => 把特定功能的代码放到函数中,起一个函数名
    // 3. 提形参 => 把可变参数改为形式参数
    // 4. 确定返回值 => 由用户自行绝对返回值,如果不设置返回值 默认返回 undefined
    // 5. 调用函数 
</script>
<script>
    // (1) 封装一个函数 在数组尾部新增一个或多个元素  push([1,2,3],"a")  => [1,2,3,"a"]


    // 注意: 
    // 封装过程中,函数内的局部变量也引用了数组的内容存空间,操作局部变量,等价于操作数组原本的内存空间,原数组也会改变

    function push() {
        // arguments:  [[1, 2, 3], 4, 5, 6]   => 二维数组(使用技巧:变相转为一维)
        // arguments:  [list, 4, 5, 6]   => 二维数组(使用技巧:变相转为一维)
        var arr = arguments[0]; // arr = list;

        for (var i = 1; i < arguments.length; i++) {
            var char = arguments[i];
            arr[arr.length] = char;
        }
        return arr.length;
    }

    var list = [1, 2, 3];
    var result = push(list, 4, 5, 6);
    // console.log(result);
    console.log(list);


    // (2) 封装一个函数 删除数组尾部的元素   pop([1, 2, 3])  => [1, 2]

    function pop(arr) {
        // var arr = list;
        arr.length--;
        // console.log(arr);
        return arr;
    }

    var list = [1, 2, 3]
    var result = pop(list);
    console.log(list);





</script>

</html>